package com.geek.water.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.geek.water.entity.User;
import com.geek.water.entity.Menu;
import com.geek.water.vo.UserLoginQueryVO;
import com.geek.water.vo.UserPageQueryVO;

import java.util.List;

public interface UserService extends IService<User> {
    /**
     * 用户登录
     */
    User login(UserLoginQueryVO vo);

    /**
     * 分页查询用户列表
     */
    Page<User> findPage(UserPageQueryVO userPageQueryVO);

    /**
     * 根据用户名查询用户
     */
    User findByUsername(String username);

    /**
     * 更新用户状态
     */
    boolean updateUserStatus(Long id, String status);

    /**
     * 重置用户密码
     */
    boolean resetPassword(Long id, String newPassword);

    /**
     * 更新用户密码（自动编码）
     */
    boolean updatePassword(Long id, String newPassword);

    /**
     * 更新最后登录时间
     */
    boolean updateLastLoginTime(Long id);

    /**
     * 根据用户ID查询用户信息（包含角色）
     */
    User getUserWithRoles(Long id);

    /**
     * 分页查询用户列表（包含角色信息）
     */
    Page<User> findPageWithRoles(UserPageQueryVO userPageQueryVO);

    /**
     * 获取用户的菜单权限ID列表
     * @param userId 用户ID
     * @return 菜单权限ID列表
     */
    List<Integer> getUserPermissionIds(Long userId);

    /**
     * 获取用户的菜单权限详情
     * @param userId 用户ID
     * @return 菜单权限列表
     */
    List<Menu> getUserPermissions(Long userId);

    /**
     * 保存用户权限（暂时通过角色管理，后续可扩展直接权限分配）
     * @param userId 用户ID
     * @param permissionIds 权限ID列表
     * @return 是否成功
     */
    boolean saveUserPermissions(Long userId, List<Integer> permissionIds);

    User findByMobile(String mobile);
}
